/**
 * Created with CLion.
 * Description: std::stack 容器的实现
 * User: cyber
 * Date: 2020-09-09
 * Time: 8:51
 */

#include <iostream>
#include <thread>
#include <deque>
using namespace std;

template<typename T, typename Container =std::deque<T> >
class MyStack
{
public:
    explicit MyStack(const Container);
    explicit MyStack(Container && = Container());

    template<class Alloc>
    explicit MyStack(const Alloc &);

    template<class Alloc>
    MyStack(const Container &, const Alloc &);

    template<class Alloc>
    MyStack(Container &&, const Alloc &);

    template<class Alloc>
    MyStack(MyStack &&, const Alloc &);

    bool empty() const;
    std::size_t size() const;
    T &top();
    T const &top() const;
    void push(T const &);
    void push(T &&);
    void pop();
    void swap(MyStack &&);

    template<class ... Args>
    void emplace(Args &&... args);
};

int main()
{

    return 0;
}